package com.ruoyi.staffing.mapper;

import java.util.List;

import com.ruoyi.staffing.domain.HrCandidate;
import com.ruoyi.staffing.domain.HrCandidateExperience;
import com.ruoyi.staffing.domain.HrCandidateFamily;
import org.apache.ibatis.annotations.Param;

/**
 * HR-候选人(求职登记)主Mapper接口
 *
 * 说明：
 * 1) 本Mapper既包含主表（候选人）CRUD，也包含子表（经历/家庭成员）的批量增删及按候选人ID查询。
 * 2) 子表的批量新增建议在对应的 XML 中使用 <foreach> 实现，参数名固定使用 "list"。
 * 3) 删除候选人时，务必先删除子表数据，再删除主表，确保外键/业务一致性。
 *
 * author: hango
 * date: 2025-10-13
 */
public interface HrCandidateMapper
{


    /**
     * 查询HR-候选人(求职登记)主
     *
     * @param id HR-候选人(求职登记)主主键
     * @return HR-候选人(求职登记)主
     */
    HrCandidate selectHrCandidateById(Long id);

    /**
     * 查询HR-候选人(求职登记)主列表
     *
     * @param hrCandidate 查询条件（可包含姓名、手机号、状态等）
     * @return HR-候选人(求职登记)主集合
     */
    List<HrCandidate> selectHrCandidateList(HrCandidate hrCandidate);

    /**
     * 新增HR-候选人(求职登记)主
     *
     * @param hrCandidate HR-候选人(求职登记)主
     * @return 影响行数
     */
    int insertHrCandidate(HrCandidate hrCandidate);

    /**
     * 修改HR-候选人(求职登记)主
     *
     * @param hrCandidate HR-候选人(求职登记)主
     * @return 影响行数
     */
    int updateHrCandidate(HrCandidate hrCandidate);

    /**
     * 删除HR-候选人(求职登记)主
     *
     * @param id HR-候选人(求职登记)主主键
     * @return 影响行数
     */
    int deleteHrCandidateById(Long id);

    /**
     * 批量删除HR-候选人(求职登记)主
     *
     * @param ids 需要删除的数据主键集合
     * @return 影响行数
     */
    int deleteHrCandidateByIds(Long[] ids);




    /**
     * 按候选人ID查询经历列表（可同时包含工作/教育经历）
     *
     * @param candidateId 候选人ID
     * @return 经历集合
     */
    List<HrCandidateExperience> selectExperienceByCandidateId(Long candidateId);

    /**
     * 按候选人ID物理删除所有经历
     *
     * @param candidateId 候选人ID
     * @return 影响行数
     */
    int deleteExperienceByCandidateId(Long candidateId);

    /**
     * 批量新增经历
     *
     * 注意：XML 中请使用 <foreach collection="list" item="item"> 做批量插入；
     * 参数名固定为 "list"，以匹配此处 @Param("list")。
     *
     * @param list 经历集合
     * @return 影响行数
     */
    int batchInsertExperience(@Param("list") List<HrCandidateExperience> list);



    /**
     * 按候选人ID查询家庭成员列表
     *
     * @param candidateId 候选人ID
     * @return 家庭成员集合
     */
    List<HrCandidateFamily> selectFamilyByCandidateId(Long candidateId);

    /**
     * 按候选人ID物理删除所有家庭成员
     *
     * @param candidateId 候选人ID
     * @return 影响行数
     */
    int deleteFamilyByCandidateId(Long candidateId);

    /**
     * 批量新增家庭成员
     *
     * 注意：XML 中请使用 <foreach collection="list" item="item"> 做批量插入；
     * 参数名固定为 "list"，以匹配此处 @Param("list")。
     *
     * @param list 家庭成员集合
     * @return 影响行数
     */
    int batchInsertFamily(@Param("list") List<HrCandidateFamily> list);
}
